const jwt = require('jsonwebtoken'); // 引入验证jsonwebtoken模块
const expressJwt = require('express-jwt'); // 引入express-jwt模块
const { PRIVATE_KEY } = require('./constant'); // 引入自定义的jwt密钥
const { querySql } = require('../utils/index')

// 验证token是否过期
const jwtAuth = expressJwt({
  // 设置密钥
  secret: PRIVATE_KEY,
  // 设置为true表示校验，false表示不校验
  credentialsRequired: true,
  // 自定义获取token的函数
  getToken: (req) => {
    let token = null;
    console.log(req.headers);
    // 从Authorization头中获取token
    if (req.headers.token) {
      const authHeader = req.headers.token;
      token = authHeader; // 如果没有前缀，直接使用
    } else if (req.headers.authorization) {
      const authHeader = req.headers.authorization;
      if (authHeader.startsWith('Bearer ')) {
        token = authHeader.substring(7); // 去掉 'Bearer ' 前缀
      } else {
        token = authHeader; // 如果没有前缀，直接使用
      }
    }
    // 从query参数中获取token
    else if (req.query && req.query.token) {
      token = req.query.token;
    }
    return token;
  },
  // 自定义验证逻辑
  isRevoked: async (req, payload, done) => {
    try {
      // 查询用户状态
      const [user] = await querySql('SELECT status FROM users WHERE username = ?', [payload.username]);
      if (!user) {
        return done(null, true); // 用户不存在，拒绝访问
      }

      // 检查用户状态
      if (user.status !== 'active') {
        return done(null, true); // 用户被禁用，拒绝访问
      }

      // 用户状态正常，允许访问
      return done(null, false);
    } catch (error) {
      return done(error);
    }
  }
}).unless({
  path: [
    '/',
    '/api/login',
    '/api/register',
    '/api/resetPwd'
  ]
});

// jwt-token解析
function decode(req) {
  const token = req.get('Authorization');
  return jwt.verify(token, PRIVATE_KEY);
}

module.exports = {
  jwtAuth,
  decode
};